# 创建集合set,set()用来创建集合的函数，type()用来查看数据类型
# 1，可与用大括号来进行创建
s = {1, 2, 3, 4}

# 2,使用set()函数来创建
ss = set('1234')
print(type(s))
print(type(ss))

# 集合的添加与删除
# 添加
s.add(6)
print(s)

# 删除集合中的第一个元素
s.pop()
print(s)

# 删除集合中的元素
s.remove(4)
print(s)

# 创建元组
# 创建空元组
tuple1 = ()
print(tuple1)

# 创建带有元素的元组，也可以有元素类型
tuple2 = (1, 'a', 3, 'hello,2.2')
print(tuple2)

# 创建一个只有一个元素的元组
tuple3 = (1,)
print(type(tuple3))

# 　使用tuple()函数将其他数据类型转化为元组类型
# 语法格式 tuple(数据)
# 将字符串转换为元组
tuple1 = tuple('hello')
print(tuple1)

# 将列表转换为元组
list1 = ['python', 'java']
tuple2 = tuple(list1)
print(tuple2)

# 从开始索引开始截取，截止到结束索引之前
tuple1 = ('h', 'e', 'l', 'l', 'o')
# 使用索引访问元组中的某个元素
# 使用正数索引，从0开始
print(tuple1[2])
# 使用负数索引，倒序从-1开始
print(tuple1[-4])

# 使用切片访问元组中的一组元素
# 使用正数切片
print(tuple1[1:4])

# 指定步长
print(tuple1[1:4:2])

# 使用负数切片
print(tuple1[-5:-1])

# # 修改元组元素
# tuple1 = (12, 34, 56)
# tuple2 = ('asd', 'mn')

# # 不能修改元组元素
# # tuple1[0]=100
# # tuple1[0]=200

# # 链接元组创建新的元组，两个数据必须都是元组
# tuple3 = tuple1 + tuple2
# print(tuple3)
# del tuple3
# h = input('请输入联系人姓名:')
# t = input('请输入13位手机号；')
# e = input('请输入邮箱地址；')
# a = input('请输入联系地址：')
# tuple1 = ('姓名', h, '电话', t, '邮箱', e, '地址', a)
# print(tuple1)
#
# # 列表的创建

# # 1,使用[]直接创建
# list1 = [1, 'hello', 2, 'c语言']
# print(list1)
# print(type(list1))
# # 创建空列表
# l1 = []
# print(l1)
# # 创建带有元素的列表
# l2 = [1, 2, 3, 'python', 2.2]
# print(l2)
# print(type(l2))


# # 使用list()函数将其他类型数据转换为列表
# # 字符串转换为列表
# list1 = list('hello')
# print(list1)
# # 转化元组
# t1 = tuple('hello')
# l4 = list(t1)
# print(l4)
# # 转化range
# r1 = range(5)
# l5 = list(r1)
# print(l5)
#
# # 访问列表中的元素
# List1 = ('p', 'y', 't', 'h', 'o', 'n')
# # 使用正数索引
# print(list1(2))
# # 使用负数索引
# print(list1(-3))
# # 使用索引访问列表中的元素
# l1 = ['1', '2', '3']
# # 访问h，使用正向索引
# print(l1[4])
# # 访问t，使用负向索引
# print(l1[-5])
#
# # 使用切片形式访问列表中的元素
# l2 = ['p', 'y,', 't', 'h', 'o', 'n']

# # 使用正数切片，截取索引为2,3,4的元素，默认步长为1
# print(l2[2:5])

# # 取索引3-5的元素，末尾
# print(l2[3:])

# # 取索引0-2，开头
# print(l2[:3])

# # 取索引1-5，步长2
# print(l2[1::2])

# # 使用负切片，取后三个元素
# print(l2[-3:])

# # 使用负切片，取-5——-1，步长2
# print(l2[-5:-1:2])


# # 遍历列表
# list1 = ['1', '2', '3']

# # 使用for循环遍历列表
# for item in list1:
#     print(item)
# l3 = ['1', '2', '3', '4', '5', '6']
# for i in l3:
#     print(i)


# # 修改列表元素
# # 修改单个列表元素
# l4 = [10, 56, 34, 2, 56, 44, 7]

# # 将索引为2的元素值修改为100
# l4[2] = 100
# print(l4)
#
# # 修改多个元素
# l5 = [10, 56, 34, 2, 56, 44, 7]

# # 修改第1-4个元素值(不包括第四个元素)
# l5[1:4:1] = [45, -56, 98]
# print(l5)

# 列表中添加元素
# # 1.append()用于在列表的末尾追加元素
# l6 = ['a', 'b', 'c', 'f']
# print(l6)

# # 列表添加列表
# l6.append(['e', 'f'])
# print(l6)

# 2.extend()在列表的末尾一次添加多个元素
l13 = ['a', 'b', 'c']
l13.extend('d')
print(l13)

# 列表添加列表
l13.extend(['e', 'f', 'g', 'h'])
print(l13)
l13.extend('world')
print(l13)

# 3.insert()在列表的的特定位置添加想要添加的特定元素
l14 = ['python', 'c', 'java']
# 插入元素，在索引为2处插入go元素
l14.insert(2, 'go')
print(l14)

# 删除元素
# remove删除:remove()方法是移除掉列表里面的特定元素，但只会删除一个和指定值相同的元素，而且碧玺保证钙元素是存在的，否则会引发valueError错误
l15 = ['1', '2', '3', '4']
l15.remove('1')
print(l15)

# pop（）方法用来删除列表中指定索引处的元素
l16 = [10, 56, 34, 2, 56, 44, 7]

# 删除索引值为3的元素
l16.pop(3)
print(l16)

# 删除最后一个元素
l16.pop()
print(l16)

# del可以用来删除列表中单个元素或者一算连续的元素
l17 = ['a', 'b', 'c', 'd', 'e']

# 删除索引为1的元素
del l17[1]
print(l17)
l18 = [10, 56, 34, 2, 58, 44, 7]

# 删除索引为1-3的元素
del l18[1:4]
print(l18)

# 删除单个元素
l17 = [1, 4, 8, 5, 6, 3, 2]
del l17[5]
print(l17)

# 删除8  5  6 这三个元素
del l17[2:5]
print(l17)

# 若将列表中的所有元素全部删除，可以用列表的clear()方法
l19 = ['a', 'b'',c']
l19.clear()
print(l19)

# 任务
# 创建两个空列表name_list和phone_list，用于初春联系人姓名和电话
# 向lb中添加联系人信息
# 输入联系人标号修改信息
# 输入联系人编号删除信息
# 使用clear清空通讯录。name_list=['张三','李四','王五','马六'],phone_list=[123,456,789]
# name_list=[]
# phone_list=[]
# while 1:
#     print('菜单:1.添加联系人 2.修改联系人 3.删除联系人')
#     choice=input('请输入选择:')
#     #1.添加联系人，包括姓名。手机号
#     if choice =='1':
#         name_list.append(input('请输入联系人姓名：'))
#         phone_list.append(input('请输入联系人手机号：'))
#         print(name_list)
#         print(phone_list)
#     #修改联系人信息
#     elif choice=='2':
#         num = int(input('请输入联系人编号：'))
#         if len(name_list) > 0 and num <= len(name_list):
#                 name_list[num - 1] = input("修改联系人姓名")
#                 phone_list[num - 1] = input('修改联系电话')
#             else:
#                 print("联系人编号输入有误")
#         #3、删除联系人信息
#     elif choice == '3':
#             num = int(input("请输入联系人编号："))
#             if len(name_list) > 0 and num <=len(name_list):
#                 name_list.pop(num-1)
#                 phone_list.pop(num-1)
#             else:
#                 print("联系人编号输入有误")
#         else:
#             print("显示联系人信息")
#             print(name_list)
#             print(phone_list)

# 查找元素 index()
ls1 = [1, 3, 5, 7, 'a', 'b', 8, 3, 'b', 2]
print(ls1.index(3))
print(ls1.index('b', 6))
print(ls1.index('b', 6, 9))
print(ls1.index(5))

# count() 方法来统计某个元素在列表中出现的次数 列表名.count（统计的value元素）
ls2 = [1, 3, 5, 7, 'a', 'b', 8, 3, 'b', 2, 5, 5, 7, 1]
print(ls2.count(5))
print(ls2.count(0))
print(ls2.count('b'))

# 元素排序sort()函数用于对原列表进行排序，如果制定参数，则使用指定的比较函数
# 语法格式为ls.sort(key=none,reverse=false)
# 1.元素字符串的排序
ls3 = ['3', '1', '44', '23', '99', '88']
# 默认升序
ls3.sort()
print(ls3)
# 降序 reverse = true
ls3.sort(reverse=True)
print(ls3)

# 2.元素是数值的排序
ls4 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 4, 44, 88, 55, 33, ]
# 默认升序
ls4.sort()
print(ls4)
# 降序
ls4.sort(reverse=True)
print(ls4)

# 字典
# 字典的创建
# 1.使用{}创建字典语法格式
# 字典名={‘key’:value,....}
# 使用字符串作为key
d1 = {'数学': 95, '英语': 90, '语文': 100}
print(type(d1))
# 使用元祖和数字作为key
d2 = {(20, 30): 'great', 30: [1, 2, 3]}
print(type(d2))
# 创建空元组
d3 = {}
print(d3)

# 2.用dict()方法通过关键字的参数来创建字典格式
d4 = dict(数学=90, 语文=89, 英语=88)
print(d4)

# 字典元素的访问
# 1.字典名[key]
d5 = {'数学': 95, '英语': 92, '语文': 84}
# 键存在时，返回的值是value
print(d5['英语'])
# 键不存在时，会引发一个key    error错误
print(d5['python'])

# 2.get()方法来获取指定键对应的值，语法格式：字典名.get(key[,default])
d6 = {'数学': 95, '英语': 92, '语文': 84}
# 健存在
print(d6.get('语文'))
# 键存在，不写default，会返回None
print(d6.get('python'))
print(d6.get('python', '该键不存在'))

# 字典添加键值对
d7 = {'数学': 95, '英语': 92, '语文': 84, 'python': 99, '可视化': 99}
print(d7)

# 字典修改键值对
d8 = {'数学': 95, '英语': 100, '语文': 84, 'python': 99}
print(d8)

# 字典删除值对
d9 = {'数学': 95, '英语': 92, '语文': 84, 'python': 99}
# 1.使用del关键字
del d9['语文']
print(d9)
# 2.使用pop()方法
d9.pop('英语')
print(d9)
